package com.bestcem.xm.user.util.converter.sort;

import com.bestcem.xm.common.core.domain.web.ServiceResult;
import com.bestcem.xm.common.core.enums.ReqErrorCodeEnum;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * 邮箱配置排序字段转换
 *
 * @author qiongyu.cui <qiongyu.cui@idiaoyan.com>
 * @version v1.0
 * @date 2022/6/16 14:37
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class UserSmtpSortNameConverter {

    /**
     * 排序字段映射 Map
     * key : 前端传递过来的字段，与我们vo返回的字段一致
     * value：我们数据库的字段
     */
    private static Map<String, String> sortNameMap = new HashMap<>();

    /**
     * 初始化排序字段名称映射
     *
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/06/16 14:43
     */
    private static void init() {
        sortNameMap.put("id", "smtp_id");
        sortNameMap.put("account", "account");
        sortNameMap.put("password", "password");
        sortNameMap.put("host", "host");
        sortNameMap.put("port", "port");
        sortNameMap.put("isSSL", "ssl_flag");
        sortNameMap.put("description", "description");
        sortNameMap.put("mail_from", "sender_name");
        sortNameMap.put("validate_status", "validate_status");
        sortNameMap.put("isDeliver", "deliver_flag");
        sortNameMap.put("isNotice", "notice_flag");
        sortNameMap.put("isSystem", "system_flag");
        sortNameMap.put("created_dt", "create_time");
        sortNameMap.put("updated_dt", "update_time");
        sortNameMap.put("orgID", "org_id");
        sortNameMap.put("created_id", "creator_id");
        sortNameMap.put("updated_id", "operator_id");
    }

    /**
     * 校验排序字段和排序字段转换
     *
     * @param srcSortName 请求的排序字段
     * @return java.lang.String 实际的排序字段
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/06/16 14:50
     */
    public static ServiceResult<String> checkAndConvertSortName(String srcSortName) {
        if (StringUtils.isEmpty(srcSortName)) {
            return ServiceResult.success("");
        }
        if (sortNameMap.isEmpty()) {
            init();
        }

        if (sortNameMap.containsKey(srcSortName)) {
            return ServiceResult.success(sortNameMap.get(srcSortName));
        }
        return ServiceResult.fail(ReqErrorCodeEnum.PARAM_FORMAT, "指定的排序字段不正确");
    }

}
